﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Collections.Specialized;
using haber.classes;

namespace haber
{
    public partial class anketFuncs : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        public class anketAdaylar
        {
            public int id { get; set; }
            public string ad { get; set; }
            public string soyad { get; set; }
            public string resim { get; set; }
            public string bilgi { get; set; }
            public string video { get; set; }
            public int oySayisi { get; set; }
            public int anketKisiID { get; set; }
        }

        public class anketClass
        {
            public int anketID { get; set; }
            public string anketAdi { get; set; }
            public Boolean oyKullanabilir { get; set; }
            public List<anketAdaylar> adaylar { get; set; }
        }

        public class yillar
        {
            public string text { get; set; }
            public string val { get; set; }
        }
        [WebMethod]
        public static Object varsayilanAnket()
        {
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {
                
                int? i  = int.Parse(statics.tanimGetir("ANKETKATEGORI", false));
                if (i != null && i != -1)
                {
                    var anket = from a in dc.HaberKategorileris
                                where a.KategoriID == i
                                select new { twitteradresi = a.TwitterScreenName,facebookadresi = "http://www.facebook.com/pages/" + a.FBPageName + "/" + a.FBPageID, gplusno = a.GplusNo };
                    return anket.ToList() ;
                }
                else
                {
                    return null;
                }
                
            }
        }

           [WebMethod]
        public static string bilgiGetir(int id)
        {
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {
                var bilgi = from b in dc.Kisilers
                            where b.ID == id
                            select b.Bilgi;
                return bilgi.First();

                             
            }
        }
           [WebMethod]
           public static List<yillar> yillariGetir()
           {
               using (dcHaberDataContext dc = new dcHaberDataContext())
               {
                   List<yillar> yilarr = new List<yillar>();
                   var yils = from y in dc.AnketKisis
                              select y.Yil.Value;
                   var yy =  yils.Distinct();
                   foreach (var yil in yy)
                   {
                       yilarr.Add(new yillar { text = yil.ToString() + " YILININ KENDİ DALLARINDA ÖNE ÇIKANLARI ANKETİ", val = yil.ToString() });
                   }
                   return yilarr;
               }
           }

         [WebMethod]
        public static List<anketClass> anketleriGetir(int yil)
        {
            try
            {
                using (dcHaberDataContext dc = new dcHaberDataContext())
                {
                    var anketler = from a in dc.Anketlers
                                   where a.Yayinlansin == 'T' 
                                   orderby a.Sira
                                   select new anketClass { anketAdi = a.AnketAdi, anketID = a.ID, oyKullanabilir = (cookieVarMi(a.ID) == true?false:true)};

                    if (anketler.Count() > 0)
                    {
                        anketClass[] ank = anketler.ToArray();
                        for (var i = 0; i < anketler.Count(); i++)
                        {
                            var kisiler = from k in dc.AnketKisis                                          
                                          where k.AnketID == ank[i].anketID && k.Yil == yil
                                          orderby k.OySayisi descending, k.Kisiler.Ad ascending 
                                          select new anketAdaylar { ad = k.Kisiler.Ad, soyad = k.Kisiler.Soyad,  id = k.Kisiler.ID, oySayisi = k.OySayisi, video = k.Kisiler.Video,anketKisiID=k.ID };
                            if (kisiler.Count() > 0)
                            {
                                List<anketAdaylar> aa = kisiler.ToList();
                                foreach (var a in aa)
                                {
                                    var kisiResimleri = from kr in dc.KisiResims
                                                        where kr.KisiID == a.id
                                                        select "/anketResim/"+kr.Resim;
                                    a.resim = String.Join(",", kisiResimleri);

                                }
                                ank[i].adaylar = aa;
                            }
                            else
                            {
                                ank[i].adaylar = null;
                            }
                        }
                        return ank.ToList();
                    }
                    else
                    {
                        return null;
                    }

                }
            }
            catch (Exception ex)
            {
                throw new Exception("Oy Kullanılırken Hata : " + ex.Message);
            }
        }
        

        public static void cookieYaz(int id){
           
                HttpCookie myCookie = new HttpCookie("SMH"+id);//’bsCookie’ isimli HttpCookie nesnesinin yaratılması.
                myCookie.Values["visitDate"] = DateTime.Now.ToString();//Tarih değeri atama işlemi. Birden fazla değer atanabilir.
                myCookie.Values[id.ToString()] = id.ToString();
                //myCookie.Values["kullaniciAdi"] = TextBox1.Text;//Kullanicinin adını tutabiliriz. Bunun için kullaniciAdi değişkenine değer atadık.
                myCookie.Expires = DateTime.Now.AddDays(1);//cookie’nin devre dışı kalacağı tarih.
                HttpContext.Current.Response.Cookies.Add(myCookie);//Cookie browser cachesine yazılır.           
        }
        public static Boolean cookieVarMi(int aID)
        {
            if (HttpContext.Current.Request.Cookies["SMH"+aID] != null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        public static Boolean ipAdresiVarMi(int aID,string ipadresi)
        {
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {
                var ip = from i in dc.AnketOYs
                         where i.IPAdres == ipadresi && i.AnketID == aID
                         select i;
                if (ip.Count() > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }

        public static void oyla(int aID, string ipadresi,int kisiID)
        {
            oyKullanDetayEkle(aID, kisiID, ipadresi);
            oyKullanToplam(aID, kisiID);
            cookieYaz(aID);
            
        }
        public static string ipAdresiGetir()
        {
            string ip;

            ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            if (ip == string.Empty ||ip == null)
            {
                ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            }

            return ip;
        }

        [WebMethod]
        public static Boolean oyKullanabilir(int anketID, int KisiID)
        {

            try
            {
                
                Boolean ipadresi = false;
                Boolean cookie = false;
                if (statics.tanimGetir("IPKONTROL", false) == "T")
                {
                    ipadresi = ipAdresiVarMi(anketID,ipAdresiGetir());
                }

                if (statics.tanimGetir("COOKIEKONTROL", false) == "T")
                {
                    cookie = cookieVarMi(anketID);
                    //if (cookieVarMi(anketID) == true)
                    //{
                    //    cookie =  false;
                    //}
                    //else
                    //{
                    //    cookie = true;
                    //}
                }

                if (ipadresi == true && cookie == true)
                {
                    return false;
                }
                else if (cookie == true)
                {
                    return  false;
                }
                else
                {
                    return true;
                }


            }
            catch (Exception ex)
            {
                throw new Exception("Oy Kullanılırken Hata : " + ex.Message);
            }
        }

        [WebMethod]
        public static void oyKullan(int anketID, int KisiID)
        {
            try
            {
                if (oyKullanabilir(anketID, KisiID))
                {
                    oyla(anketID, ipAdresiGetir(), KisiID);
                }
                else
                {
                    throw new Exception("Bugün içinde, aynı ankete başka oy kullanamazsınız.");
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Oy Kullanılırken Hata : " + ex.Message);
            }
        }

        public static void oyKullanToplam(int anketID, int KisiID)
        {
            try
            {
                using (dcHaberDataContext dc = new dcHaberDataContext())
                {
                    var anket = from a in dc.AnketKisis
                                where a.AnketID == anketID
                                && a.KisiID == KisiID
                                select a;
                    if (anket.Count() > 0)
                    {
                        anket.First().OySayisi += 1;
                        dc.SubmitChanges();
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Oy Kullanılırken Hata : " + ex.Message);
            }
        }

        public static void oyKullanDetayEkle(int anketID, int KisiID, string ipadresi)
        {
            try
            {
                using (dcHaberDataContext dc = new dcHaberDataContext())
                {
                    AnketOY ao = new AnketOY();
                    ao.AnketID = anketID;
                    ao.KisiID = KisiID;
                    ao.IPAdres = ipadresi;
                    dc.AnketOYs.InsertOnSubmit(ao);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Oy Kullanılırken Hata : " + ex.Message);
            }
        }

    }
}